USE business;
GO
-- jeli istnieje tabela z uytkownikami... 
IF OBJECT_ID('dbo.Uzytkownicy') IS NOT NULL
	DROP TABLE dbo.Uzytkownicy; -- ... to j usuwamy
GO
-- tworzymy tabel przechowujc login i haso
CREATE TABLE dbo.Uzytkownicy
(
	Uzytkownik VARCHAR(20) NOT NULL PRIMARY KEY,
	Haslo      VARCHAR(15) NOT NULL
);

-- wstawiamy dane dotyczce dwch uytkownikw
INSERT INTO dbo.Uzytkownicy (Uzytkownik, Haslo)
VALUES ('Testowy1', 'Haslo1');
INSERT INTO dbo.Uzytkownicy (Uzytkownik, Haslo)
VALUES ('Testowy2', 'Haslo2');

-- oprogramowujemy sposb logowania si do aplikacji
DECLARE
	@sql   NVARCHAR(300),
	@user  NVARCHAR(20),
	@pass  NVARCHAR(15),
	@ilosc INT;
-- gdzie w aplikacji ustawiany jest login i haso
SET @user = N'Testowy1';
SET @pass = N'Haslo1';
-- ...
-- tworzymy zapytanie sprawdzajace ilu jest uytkownikw o podanym loginie i hale
SET @sql = N'SELECT @p_ilosc = COUNT(*) FROM dbo.Uzytkownicy ' + 
           'WHERE Uzytkownik = ''' + @user + ''' AND Haslo = ''' + @pass + '''';
-- wykonujemy zapytanie
EXEC sp_executesql
		@sql,
		N'@p_ilosc INT OUTPUT',
		@p_ilosc = @ilosc OUTPUT;
-- drukujemy warto  zamy, e jeli wywietlona zostanie liczba wiksza od zera to 
-- udao si zalogowa
PRINT @ilosc; -- w naszym przypadku wypisana zostaa warto 1  udao si zalogowa
GO


DECLARE
	@sql   NVARCHAR(300),
	@user  NVARCHAR(20),
	@pass  NVARCHAR(15),
	@ilosc INT;

-- odpowiednio spreparowny kod wstawiany do zmiennej @user
SET @user = N''' OR 1 = 1 --';         
-- do zmiennej @haslo mona wpisa dowolny tekst
SET @pass = N'';
SET @sql = N'SELECT @p_ilosc = COUNT(*) FROM dbo.Uzytkownicy ' + 
           'WHERE Uzytkownik = ''' + @user + ''' AND Haslo = ''' + @pass + '''';
-- wypisywanie zapytania
PRINT @sql;
-- wykonanie zapytania
EXEC sp_executesql
		@sql,
		N'@p_ilosc INT OUTPUT',
		@p_ilosc = @ilosc OUTPUT;

PRINT @ilosc; -- zostanie zwrcona warto 2  udao si zalogowa do aplikacji
